<?php
class ImportsController extends AppController {

	var $name = 'Imports';
	var $uses = array('Bizonylat', 'Szamla', 'Setting', 'Terv', 'Osztaly', 'Riportsor');

	function isAuthorized(){
		if(in_array($this->Auth->user('csoport'), array(1,2))){		//adminok és könyvelők
			return true;
		}
		return false;		//minden más tiltva
	}
	
/* Fájlok importálása
 *
 * @return nothing
 * @access public
*/
	function index(){
		//a script futása némileg hosszadalmas lehet, a defualt 30 fölé kell venni
		set_time_limit(300);	//5 perc után a webszerver így is úgy is lelövi a folyamatot

		if(!empty($this->request->data) && $this->isUploadedFile($this->request->data['Import']['File']['tmp_name'])){	//az is_uploaded_file biztosítja, hogy ne lehessen külső fájlokat feltölteni a webről
			App::uses('EasyDate', 'Utility');
			$easyDate = new EasyDate();
			$easyDate->onErrorReturnCurrentDate = true;
			$datum = $easyDate->change($this->request->data['Import']['datum']);
			if(substr($datum, 0, 4) != $this->Session->read('Settings.ev')){
				throw new NotImplementedException('A ' . $datum . ' nem a könyvelési évben (' . $this->Session->read('Settings.ev') . ') van. Csendben elpusztulok');
			}
			$this->set('datum', $datum);
			
			if($this->request->data['Import']['File']['type'] == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'){	//excel file
				$this->excelImport($this->request->data['Import']['File']);
			}
			else{
				$fileData = fread(fopen($this->request->data['Import']['File']['tmp_name'], "r"), $this->request->data['Import']['File']['size']);
				$file = array(
							//'name' => $this->request->data['Import']['File']['name'],
							'type' => $this->request->data['Import']['File']['type'],
							//'tmp_name' => $this->request->data['Import']['File']['tmp_name'],
							//'error' => $this->request->data['Import']['File']['error'],
							//'size' => $this->request->data['Import']['File']['size'],
							'data' => $fileData
							);
				unset($this->request->data, $fileData);
	
				/*debug($file);
				/*[name] => pt090131.csv
				[type] => text/csv
				[tmp_name] => /tmp/phpz3QPqh
				[error] => 0
				[size] => 45576
				[data] => 11;5296;"50 VIM, 1 MB";41;814;"50 VIM, 1 MB";24 800;0
					11;51737;"szoc díj - január";19;91119;"szoc díj - január";10 000;7 002
					11;51737;"szoc díj - január";19;91119;"szoc díj - január";10 000;7 034
					11;5172;"gázpalack";59;911592;"gázpalack";4 650;7 034
				*/
				$csvMimes = array('text/csv', 'text/comma-separated-values', 'application/vnd.ms-excel');
				if(in_array($file['type'], $csvMimes)){
					$importType = $this->getCsvImportType($file['data']);
					$file['data'] = str_replace("\r", '', $file['data']);
					if($importType == 'atiras'){
						$this->atirasImport($file['data'], $datum);
					}
					if($importType == 'targyiAdomany'){
						$this->targyiAdomanyImport($file['data'], $datum);
					}
				}
				else
					throw new NotImplementedException('A kiválaszott file nem csv file: ' . $file['type']);
			}
		}
		/*else{
			debug($this->isUploadedFile($this->request->data['Import']['File']['tmp_name']));
		}*/
	}

/* Wrapper ahhoz, hogy tesztelni lehessen. E nélkül az is_uploaded_file false-t ad vissza a tesztben
*
* @param string $file
* @return boolean
*/
	public function isUploadedFile($file){
		return is_uploaded_file($file);
	}

/* Import típus kiválasztás a file tartalma alapján
 *
 * @param string $csvData a csv file tartalma
 * @return string az import file típusa
*/
	public function getCsvImportType($csvData){
		if(strpos($csvData, 'hova'))
			return 'atiras';
		else if(strpos($csvData, 'szöveg;szöveg;szöveg;'))
			return 'targyiAdomany';
		else{
			throw new NotImplementedException('A csv tartalma alapján nem tudok mit kezdeni vele!' . "\n" . substr($csvData,0,100));
		}
	}

/* átírás import
 *
 * @param string $csvData a csv file tartalma
 * @param string $datum a könyvelési dátum "2012-11-21" formában
 * @return 
*/
	function atirasImport($csvData, $datum){
		$csvData = str_replace('honnan;;szla szám;;Szöveg;Egyébgy;;;hova;;szla szám;;Szöveg;;összeg'."\n", '', $csvData);
		$csvData = str_replace("\n".';;;;;;;;;;;;0;;', '', $csvData);

		$adatok = explode("\n", $csvData);
		if(strpos($adatok[0], 'honnan') === 1){		//még mindig előfordulhat, hogy az első sorban bennragad a fejléc
			array_shift($adatok);
		}
		$sorok = count($adatok);
		//debug($adatok);
		//menjünk végig a tömbünkön és ellenőrizzük, hogy be tudjuk-e nyalni
		$tetelTomb = $ellenSzamlak = $osztalykodok = $errorz = $gyujtok = $naplok = array();

		//milyen valutában történjen az átírás?
		//hc: Krisna-völgyben Syama, a többiben HUF
		$atirosValutaId = ($this->Session->read('Settings.cegId') == 2) ? $this->Setting->getRow('syama_valuta_id') : $this->Setting->getRow('alap_valuta_id');
		$atirosValutaId = $atirosValutaId['Setting']['value'];

		foreach($adatok as $index => $sor){
			if(!$sor)
				$sorok--;
			else{
				$sor = str_replace('"', '', $sor);		//pucolás
				$sor = explode(';', $sor);	//csv
				//debug($sor);die();
				/* array(
						(int) 0 => '16',
						(int) 1 => 'ĂpĂ­tĂŠs',
						(int) 2 => '528',
						(int) 3 => 'Postaktg',
						(int) 4 => 'posta ktg',
						(int) 5 => '',
						(int) 6 => '',
						(int) 7 => '',
						(int) 8 => '12',
						(int) 9 => 'Controlling',
						(int) 10 => '528',
						(int) 11 => 'Postaktg',
						(int) 12 => 'posta ktg',
						(int) 13 => '',
						(int) 14 => '530'
					)				*/

				$sor = $this->csvTrim($sor);

				//a 0. indexen van a kiadó osztály kódja
				//létezik ez az osztálykód?
				if(!$sor[0])
					//nincs kiadási osztálykód
					$errorz = $this->_addHiba($errorz, $index, 'Nincs megadva osztálykód a kiadási oldalon', $sor);
				elseif(!array_key_exists($sor[0], $osztalykodok)){		//létező kódot adott?
					$this->Bizonylat->Osztaly->unbindModel(array('hasMany' => array('Bizonylat'), 'hasAndBelongsToMany' => array('User', 'GyujtoOsztaly')));
					$this->Bizonylat->Osztaly->bindModel(array('hasOne' => array('GyujtoOsztaly')));
					//debug(var_dump($sor[0]));
					$o = $this->Bizonylat->Osztaly->find(
											'first',
											array(
												'fields' => array('id'),
												'conditions' => array(
																		'Osztaly.kod' => $sor[0],
																		'Osztaly.ev' => $this->Session->read('Settings.ev'),
																		'GyujtoOsztaly.gyujto_id' => $this->Session->read('Settings.cegId')
																		)
												)
											);
					//debug($o);
					if($o){
						$osztalykodok[$sor[0]] = $o['Osztaly']['id'];
						//naplókód lekérése - mivel ide jutottunk a jelenlegi naplo még biztosan nem szerepel a $naplok tömbbe mert az osztálykódokkal együtt fut
						$n = $this->Bizonylat->Naplo->getNaplo($o['Osztaly']['id'], $atirosValutaId, $this->Session->read('Settings.ev'));

						if($n)
							$naplok[$sor[0]] = $n;
						else
							$errorz = $this->_addHiba($errorz, $index, 'A kiadási napló nem létezik', $sor);
					}
					else{
						//nem létező osztálykód a kiadási oldalon
						$errorz = $this->_addHiba($errorz, $index, 'Nem létező osztálykód a kiadási oldalon: ' . $sor[0], $sor);
					}
				}
				//az 1. indexen van az osztál neve, ezt eldobjuk
				//az 2. indexen van a kiadó osztálybeli ellenszámla
				if(!$sor[2])
					$errorz = $this->_addHiba($errorz, $index, 'Nincs megadva számlaszám a kiadási oldalon', $sor);
				elseif(!array_key_exists($sor[2], $ellenSzamlak)){
					$o = $this->Bizonylat->Tetel->TartozikSzamla->find(
															'first',
															array(
																'fields' => array('id'),
																'conditions' => array(
																							'TartozikSzamla.szam' => $sor[2],
																							'TartozikSzamla.ev' => array(0, $this->Session->read('Settings.ev')),
																							),
																'recursive' => -1
															)
															);
					if($o){
						$ellenSzamlak[$sor[2]] = $o['TartozikSzamla']['id'];
					}
					else
						$errorz = $this->_addHiba($errorz, $index, 'Nem létező számlaszám a kiadási oldalon: ' . $sor[2], $sor);
				}

				//a 3. indexen van a számla neve, eldobjuk
				//a 4. indexen van a kiadási szöveg
				if(!is_string($sor[4]) || strlen($sor[4]) == 0)
					$errorz = $this->_addHiba($errorz, $index, 'Nem ismerhető fel vagy hiányzik a szöveg a kiadási oldalon: ' . $sor[4], $sor);
				//a 5. index a gyüjtő - később
				//az 6. index a gyüjtő neve - eldobjuk
				//a 7. index üres - eldobjuk
				//a 8. indexen van a bevételi osztály kódja
				//ugye nem egyezik a kiadó osztály kódjával?
				if(!$sor[8])
					$errorz = $this->_addHiba($errorz, $index, 'Nincs megadva osztálykód a bevételi oldalon', $sor);
				elseif($sor[8] == $sor[0])
					$errorz = $this->_addHiba($errorz, $index, 'Ugyanaz az osztálykód szerepel mindkét oldalon: ' . $sor[0] . ' ::: ' . $sor[8], $sor);
				elseif(!array_key_exists($sor[8], $osztalykodok)){	//létező kódot adott?
					$this->Bizonylat->Osztaly->unbindModel(array('hasMany' => array('Bizonylat'), 'hasAndBelongsToMany' => array('User', 'GyujtoOsztaly')));
					$this->Bizonylat->Osztaly->bindModel(array('hasOne' => array('GyujtoOsztaly')));
					$o = $this->Bizonylat->Osztaly->find(
													'first',
													array(
														'fields' => array('id'),
														'conditions' => array(
																				'Osztaly.kod' => $sor[8],
																				'Osztaly.ev' => $this->Session->read('Settings.ev'),
																				'GyujtoOsztaly.gyujto_id' => $this->Session->read('Settings.cegId')
																				)
														)
													);
					if($o){
						$osztalykodok[$sor[8]] = $o['Osztaly']['id'];
						//naplókód lekérése - mivel ide jutottunk a jelenlegi naplo még biztosan nem szerepel a $naplok tömbbe mert az osztálykódokkal együtt fut
						$n = $this->Bizonylat->Naplo->getNaplo($o['Osztaly']['id'], $atirosValutaId, $this->Session->read('Settings.ev'));
						//debug($n);
						if($n)
							$naplok[$sor[8]] = $n;
						else
							$errorz = $this->_addHiba($errorz, $index, 'A bevételi napló nem létezik', $sor);
					}
					else
						$errorz = $this->_addHiba($errorz, $index, 'Nem létező osztálykód a bevételi oldalon: ' . $sor[8], $sor);
				}
				//debug($naplok);
				//a 9. indexen az osztály neve - eldobjuk
				//a 10. indexen van a a bevételi osztály ellenszámla
				if(!$sor[10])
					$errorz = $this->_addHiba($errorz, $index, 'Nincs megadva számlaszám a bevételi oldalon', $sor);
				if(!array_key_exists($sor[10], $ellenSzamlak)){
					$o = $this->Bizonylat->Tetel->TartozikSzamla->find(
															'first',
															array(
																'fields' => array('id'),
																'conditions' => array('TartozikSzamla.szam' => $sor[10],
																							'TartozikSzamla.ev' => array(0, $this->Session->read('Settings.ev'))
																							),
																'recursive' => -1
															)
															);
					if($o)
						$ellenSzamlak[$sor[10]] = $o['TartozikSzamla']['id'];
					else
						$errorz = $this->_addHiba($errorz, $index, 'Nem létező számlaszám a bevételi oldalon: ' . $sor[10], $sor);
				}

				//a 11. indexen a számla neve, eldobjuk
				//a 12. indexen a bevételi szöveg
				if(!is_string($sor[12]) || strlen($sor[12]) == 0)
					$errorz = $this->_addHiba($errorz, $index, 'Nem ismerhető fel vagy hiányzik a szöveg a bevételi oldalon: ' . $sor[12], $sor);

				//a 13. index üres - eldobjuk
				//a 14. indexen van az összeg
				$sor[14] = preg_replace('/\pZ+/u', '', $sor[14]);
				if(!preg_match('/^\d+$/', $sor[14]))
					$errorz = $this->_addHiba($errorz, $index, 'Nem ismerhető fel vagy hiányzik az összeg: ' . $sor[14], $sor);


				//a 5. indexen van a gyüjtő
				$sor[5] = preg_replace('/\pZ+/u', '', $sor[5]);
				if($sor[5] && !array_key_exists($sor[5], $gyujtok)){
					$o = $this->Bizonylat->Tetel->Gyujto->find(
															'first',
															array(
																'fields' => array('id', 'kod'),
																'conditions' => array('kod' => $sor[5]),
																'recursive' => -1
															)
															);
					if($o)
						$gyujtok[$sor[5]] = $o['Gyujto']['id'];
					else
						$errorz = $this->_addHiba($errorz, $index, 'Nem létező gyüjtőkód: ' . $sor[5], $sor);
					//else nincs megadva gyüjtő
				}

				//ha minden oké akkor mentjük az átírást
				if(!isset($errorz[$index])){
					//tömb létrehozása a mentéshez

					$bizonylat = array('be' => array(), 'ki' => array());
					//kimenő oldal
					$bizonylat['ki'] = array(
						'Bizonylat' => array(
												'naplo_id' => $naplok[$sor[0]]['id'],
												'osztaly_id' => $osztalykodok[$sor[0]],
												'user_id' => $this->Session->read('Auth.User.id'),
												'sorszam' => 0,
												'datum' => $datum,
												'arfolyam' => 1,
												'megjegyzes' => $datum . ' / ' .($index+2)
												),
						'Tetel' => array(
											0 => array(
												'sorszam' => 0,
												'szoveg' => $sor[4],
												'osszeg' => $sor[14],
												't' => $ellenSzamlak[$sor[2]],
												'k' => $naplok[$sor[0]]['alapertelmezett_szamla'],
												'parinfo' => $sor[0] . ' ' . $sor[1]
											)
										)
						);
					if(isset($gyujtok[$sor[5]]) && $gyujtok[$sor[5]]){
						$bizonylat['ki']['Tetel'][0]['gyujto'] = array($gyujtok[$sor[5]]);
					}

					//bejövő oldal
					$bizonylat['be'] = array(
						'Bizonylat' => array(
												'naplo_id' => $naplok[$sor[8]]['id'],
												'osztaly_id' => $osztalykodok[$sor[8]],
												'user_id' => $this->Session->read('Auth.User.id'),
												'sorszam' => 0,
												'datum' => $datum,
												'arfolyam' => 1,
												'megjegyzes' => $datum . ' / ' .($index+2)
												),
						'Tetel' => array(
											0 => array(
												'sorszam' => 0,
												'szoveg' => $sor[12],
												'osszeg' => $sor[14],
												't' => $naplok[$sor[8]]['alapertelmezett_szamla'],
												'k' => $ellenSzamlak[$sor[10]],
												'parinfo' => $sor[8] . ' ' . $sor[9]
											)
										)
						);
					if(isset($gyujtok[$sor[5]]) && $gyujtok[$sor[5]]){
						$bizonylat['be']['Tetel'][0]['gyujto'] = array($gyujtok[$sor[5]]);
					}
					/*if($index == 1){
						debug($sor);
						debug($bizonylat);
						debug($naplok);
						debug($osztalykodok);
					}*/
					array_push($tetelTomb, $bizonylat);
				}
			}
		}
		if(count($errorz)){
			$this->set('errorz', $errorz);
			$this->set('sorok', $sorok);
		}
		else{
			//nem volt hiba indulhat a mentés
			//debug($tetelTomb);
			foreach($tetelTomb as $t){
				//a kimenő és a bejövő oldalt összefogjuk egy tranzakcióba
				$mentve = array('be' => null, 'ki' => null);
				$dataSource = $this->Bizonylat->getDataSource();
				$dataSource->begin();
				//sorszám kikeresése és hozzáadása a bizonylat tömbhöz
				$sorszam = $this->Bizonylat->find('first',
													 array(
															 'fields' => 'sorszam',
															 'order' => 'sorszam DESC',
															 'recursive' => -1,
															 'conditions' => array(
																					'Bizonylat.naplo_id' => $t['ki']['Bizonylat']['naplo_id']
																					)
															 )
													 );
				$t['ki']['Bizonylat']['sorszam'] = $sorszam['Bizonylat']['sorszam'] ? $sorszam['Bizonylat']['sorszam']+1 : 1;
				$t['ki']['Tetel'][0]['szoveg'] = '[' . $t['be']['Tetel'][0]['parinfo'] . '] ' . $t['ki']['Tetel'][0]['szoveg'];
				$mentve['ki'] = $this->Bizonylat->rogzit($t['ki'], $this->Session->read('Settings'), false);

				//sorszám kikeresése és hozzáadása a bizonylat tömbhöz
				$sorszam = $this->Bizonylat->find('first',
													 array(
															 'fields' => 'sorszam',
															 'order' => 'sorszam DESC',
															 'recursive' => -1,
															 'conditions' => array(
																					'Bizonylat.naplo_id' => $t['be']['Bizonylat']['naplo_id']
																					)
															 )
													 );
				$t['be']['Bizonylat']['sorszam'] = $sorszam['Bizonylat']['sorszam'] ? $sorszam['Bizonylat']['sorszam']+1 : 1;
				$t['be']['Tetel'][0]['szoveg'] = '[' . $t['ki']['Tetel'][0]['parinfo'] . '] ' . $t['be']['Tetel'][0]['szoveg'];
				$mentve['be'] = $this->Bizonylat->rogzit($t['be'], $this->Session->read('Settings'), false);

				if($mentve['ki'] && $mentve['be'])
					$dataSource->commit();
				else{
					$dataSource->rollback();
					//debug($t);
					$hibaUzenet = $mentve['ki'] ?
							'"Valami roppant gáz van" típusú beimport hiba a <b>bevételi</b> oldalon a ' . $t['be']['Bizonylat']['megjegyzes'] . ' sorban':
							'"Valami roppant gáz van" típusú beimport hiba a <b>kiadási</b> oldalon a ' . $t['ki']['Bizonylat']['megjegyzes'] . ' sorban';
					array_push($errorz, $hibaUzenet);
				}
			}
			if(count($errorz))
				$this->set('mentesHibak', $errorz);
			else
				$this->set('sikeres', 'Az átírás adatok sikeresen benyalva!');
			//debug($tetelTomb);
		}
	}

	private function csvTrim($sor){
		//pucolgatunk
		foreach($sor as $i=>$a){
			$a = trim($a);
			$a = preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u','', $a);
			$sor[$i] = preg_replace('/[\x00-\x1F\x7f-\x9F]/u', '', $a);
		}
		return $sor;
	}
	
	function _addHiba($errorz, $index, $hibaUzenet, $atiras){
		if(array_key_exists($index, $errorz))
			array_push($errorz[$index]['hiba'], $hibaUzenet);
		else
			$errorz[$index] = array(
										'hiba' => array($hibaUzenet),
										'atiras' => $atiras
										);
		return($errorz);
	}

/* tárgyi adomány import
 * az adományokat a vegyesben könyveljük le
 *
 * @param string $csvData a csv file tartalma
 * @param string $datum a könyvelési dátum "2012-11-21" formában
 * @return 
*/
	private function targyiAdomanyImport($csvData, $datum){
		$csvData = str_replace('osztálykód;bevétel;költség;szöveg;szöveg;szöveg;szöveg;összeg'."\n", '', $csvData);
		$adatok = explode("\n", $csvData);
		if($adatok[count($adatok)-1] == ""){ 
			array_pop($adatok);
		}
		
		$errorz = $tetelek = array();
		foreach($adatok as $index => $sor){
			$sor = str_replace('"', '', $sor);		//pucolás
			$sor = explode(';', $sor);	//csv
			
			$sor = $this->csvTrim($sor);
			
			$hibaUzenet = 'Hiba array(z) ' . ($index+1) . '. sorban: ';
			
			//a 0. indexen van az osztály kódja aki kapta az adományt
			if(!$sor[0])
				$errorz[] = $hibaUzenet . 'Nincs megadva osztálykód!';
			$osztalyId = $this->Bizonylat->Osztaly->getOsztalyId($sor[0], array(
																						'ev' => $this->Session->read('Settings.ev'),
																						'cegId' => $this->Session->read('Settings.cegId')
																						));
			if(!$osztalyId){
				$errorz[] = $hibaUzenet . 'Nem létezik array(z) ' . $sor[0] . ' osztály kód!';
			}
			
			//az 1. indexen van a bevételi számla száma
			if(!$sor[1])
				$errorz[] = $hibaUzenet . 'Nincs megadva bevétel számlaszám!';
			if(!$this->Szamla->getSzamlaId($sor[1], array(
																		'ev' => $this->Session->read('Settings.ev'),
																		'cegId' => $this->Session->read('Settings.cegId'),
																		'szamlaSzam' => true
																		))){
				$errorz[] = $hibaUzenet . 'Nem létezik array(z) ' . $sor[1] . ' bevételi számla szám!';
			}
			
			//a 2. indexen van a ktg számla száma
			if(!$sor[2])
				$errorz[] = $hibaUzenet . 'Nincs megadva költség számlaszám!';
			if(!$this->Szamla->getSzamlaId($sor[2], array(
																		'ev' => $this->Session->read('Settings.ev'),
																		'cegId' => $this->Session->read('Settings.cegId'),
																		'szamlaSzam' => true
																		))){
				$errorz[] = $hibaUzenet . 'Nem létezik array(z) ' . $sor[2] . ' kiadási számla szám!';
			}

			//a 3.-4.-5.-6. indexen van a szöveg
			if(!$sor[3])
				$errorz[] = $hibaUzenet . 'Nincs megadva szöveg!';

			//a 7. indexen van az összeg
			if(!$sor[7])
				$errorz[] = $hibaUzenet . 'Nincs megadva összeg!';

			if(!$errorz){		//ha nincs errorz beolvashatjuk a $tetelek tömbbe osztályonként
				App::uses('SzamKezelo', 'Utility');
				$szamKezelo = new SzamKezelo();
				$tetel = array('accountK' => $sor[1],
									'accountT' => $sor[2],
									'osszeg' => $szamKezelo->floatFromString($sor[7]),
									'szoveg' => trim($sor[3] . ' ' . $sor[4] . ' ' . $sor[5] . ' ' . $sor[6])
									);
				if(isset($tetelek[$osztalyId]))
					array_push($tetelek[$osztalyId], $tetel);
				else
					$tetelek[$osztalyId][0] = $tetel;
			}
		}
		if(!$errorz){
			//nem volt hiba menthető minden tétel bizonylatonként
			$naploId = $this->Bizonylat->Naplo->getVegyesId(array(
																				'ev' => $this->Session->read('Settings.ev'),
																				'cegId' => $this->Session->read('Settings.cegId')));
			$bizonylatSorszam = $this->Bizonylat->getLastFromNaplo($naploId);
			$bizonylatSorszam = ($bizonylatSorszam['sorszam']+1);
			$data = array(
				'Bizonylat' => array(
					'_method' => 'POST',
					'datum' => $datum,
					'megjegyzes' => 'Tárgyi adományok',
					'naplo_id' => $naploId,
					'osztaly_id' => null,
					'sorszam' => $bizonylatSorszam,
					'user_id' => $this->Session->read('Auth.User.id')),
				'ev' => $this->Session->read('Settings.ev'),
				'cegId' => $this->Session->read('Settings.cegId'),
				'tipus' => 'import');
			foreach($tetelek as $osztalyId => $tetel){
				$data['Bizonylat']['osztaly_id'] = $osztalyId;
				$data['Tetel'] = $tetel;
				//debug($data);
				if($elokeszitettData = $this->Bizonylat->elokeszit($data)){
					//debug($elokeszitettData);
					$this->Bizonylat->create();
					$this->Bizonylat->rogzit($elokeszitettData, $this->Session->read('Settings'));
					$data['Bizonylat']['sorszam']++;
				}
				else{
					return false;
				}
			}
			$this->set('sikeres', 'A tárgyi adomány adatok sikeresen benyalva!');
			return true;
		}
		else{
			$this->set('mentesHibak', $errorz);
			return false;
		}
	}

/* excel import
 *
 * @param array $file az excel file
 * @return 
*/
	function excelImport($file){
		App::uses('EasyDate', 'Utility');
		$easyDate = new EasyDate();
		$easyDate->onErrorReturnCurrentDate = true;
		$datum = $easyDate->change($this->request->data['Import']['datum']);
		$ev = substr($datum, 0, 4);
		
		App::import('vendor', 'PHPExcel');
		$riportId = 1;		//TODO HC Beszámoló
		/*debug($file);
		/*array(
			'name' => 'terv2013.xlsx',
			'type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
			'tmp_name' => '/tmp/phpnwHZGV',
			'error' => (int) 0,
			'size' => (int) 1249782)
		*/
		$sikeres = '';
		$objPHPExcel = PHPExcel_IOFactory::load($file['tmp_name']);
		$sheetCount = $objPHPExcel->getSheetCount();
		$sheetNames = $objPHPExcel->getSheetNames();
		$honapOszlopok = array('D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O');
		$dataSource = $this->Terv->getDataSource();
		foreach($sheetNames as $sheetIndex => $sheetName){
			$objPHPExcel->setActiveSheetIndex($sheetIndex);
			if(strpos($sheetName, '_')){
				$o = explode('_', $sheetName);
				$sheet = $objPHPExcel->getActiveSheet()->toArray(null, true, false, true);
				if($sheet[1]['A'] == $o[0]){
					$osztalyId = $this->Osztaly->getOSztalyId($o[0], array(
																		'ev' => $this->Session->read('Settings.ev'),
																		'cegId' => $this->Session->read('Settings.cegId')
																		));
					if($osztalyId){
						$dataSource->begin();
						$sorok = array();
						foreach($sheet as $sor => $oszlop){
							//a $oszlop['A'] cellában van a ripotsor sorszáma - már ha van (riportsorok.sorszam)
							if(!in_array($oszlop['A'], $sorok)){		//ha ilyen sorszámú sort még nem dolgoztunk fel
								$sorok[] = $oszlop['A'];
								$riportsortId = $this->Riportsor->getSorId($oszlop['A'], $riportId);
								if($riportsortId){
									foreach($honapOszlopok as $hoSorszam => $oszlopNev){
										if(intval($oszlop[$oszlopNev])){
											$data = array('Terv' => array(
															'osztaly_id'	=> $osztalyId,
															'riportsor_id'	=> $riportsortId,
															'ev'				=> intval($ev),
															'ho'				=> ($hoSorszam + 1),
															'osszeg'			=> $oszlop[$oszlopNev]
															));
											$this->Terv->id = null;
											try{
												$t = $this->Terv->save($data);
											}
											catch(Exception $e){
												throw new NotImplementedException('Nem sikerült elmenteni: ' . var_export($data, true) . $e->getMessage());
											}
										}
									}
								}
							}
						}
						$dataSource->commit();
						$sikeres .= 'Terv - ' . $ev . ' ' . $o[0] . ' importálva. <hr>';
					}
					else
						throw new NotImplementedException('A ' . $o[0] . ' osztály kódot nem tudtam beazonosítani');
				}
				else{
					throw new NotImplementedException('A sheet neve: ' . $sheetName . '.
																 Ez alapján az A1-es cellában várt érték: ' . $o[0] . '.
																 Az ott szereplő érték: ' . $sheet[1]['A']);
				}
			}
		}
		$this->set('sikeres', $sikeres);
	}
}
?>